約 2,913,237 件
https://w.atwiki.jp/sampleisbest/pages/163.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 ListView アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode 注意 元のファイルが失われる恐れがあるので、必要なファイルは必ずバックアップを取ってください。 参考 リストビューの基礎 ListView.cpp // Unicode #include Windows.h #include CommCtrl.h #include sqlext.h #include vector #include string #include "resource.h" #define DRIVER TEXT("Microsoft Text Driver (*.txt; *.csv)") #define DATABASE TEXT("C \\tmp") #define TABLE TEXT("09TOCHIG.CSV") #define TABLE2 TEXT("09TOCHIG_.CSV") // 型定義 struct ColInfo {// 列情報 std wstring strName;// 列名 SQLSMALLINT datatype;// データ型 }; typedef std vector ColInfo VecCI; // 関数プロトタイプ宣言 INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnNmDblClk(HWND hDlg, LPARAM lParam); void OnInitDialog(HWND hDlg); void LoadTable(HWND hDlg); void SaveTable(HWND hDlg); BOOL CreateTable(void); BOOL InsertRecord(void); INT_PTR CALLBACK SubDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnSubInitDialog(HWND hDlg); void OnOK(HWND hDlg); // 外部変数構造体 static struct { HINSTANCE hInstance; HWND hList;// リストビュー SQLHENV henv;// 環境ハンドル SQLHDBC hdbc;// 接続ハンドル VecCI vecci;// 列情報 int iItem;// 指定された行 } g; //============================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { // ODBC環境ハンドルの確保 SQLRETURN rc;// retcode rc = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, g.henv); rc = SQLSetEnvAttr(g.henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); g.hInstance = hInstance; DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, MainDlgProc); SQLFreeHandle(SQL_HANDLE_ENV, g.henv); return 0; } //------------------------------------------------------------------------------ INT_PTR CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR nRet = TRUE;// メッセージを処理した switch (uMsg) { case WM_NOTIFY switch (((LPNMHDR)lParam)- idFrom) { case IDC_LIST switch (((LPNMLISTVIEW)lParam)- hdr.code) { case NM_DBLCLK OnNmDblClk(hDlg, lParam); break; } break; } break; case WM_COMMAND switch (LOWORD(wParam)) { case IDC_UPDATE int nr; nr = MessageBox(hDlg, L"CSVファイルを更新しますか?", L"確認", MB_OKCANCEL); if (nr == IDOK) { SaveTable(hDlg); MessageBox(hDlg, L"完了しました。", L"報告", MB_OK); } break; case IDCANCEL EndDialog(hDlg, IDCANCEL); break; } break; case WM_INITDIALOG OnInitDialog(hDlg); nRet = TRUE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE EndDialog(hDlg, 0); break; case WM_DESTROY SQLDisconnect(g.hdbc); SQLFreeHandle(SQL_HANDLE_DBC, g.hdbc); break; default nRet = FALSE;// メッセージを処理しなかった } return nRet; } //------------------------------------------------------------------------------ void OnNmDblClk(HWND hDlg, LPARAM lParam) { LPNMLISTVIEW plv = (LPNMLISTVIEW)lParam; g.iItem = plv- iItem; DialogBox(g.hInstance, MAKEINTRESOURCE(IDD_SUB), hDlg, SubDlgProc); } //------------------------------------------------------------------------------ void OnInitDialog(HWND hDlg) { // リストビュー拡張スタイル g.hList = GetDlgItem(hDlg, IDC_LIST); DWORD dwExStyle = ListView_GetExtendedListViewStyle(g.hList); dwExStyle |= LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES; ListView_SetExtendedListViewStyle(g.hList, dwExStyle); // テーブルの読み込み LoadTable(hDlg); } //------------------------------------------------------------------------------ void LoadTable(HWND hDlg) { SQLHSTMT hstmt;// 命令ハンドル SQLSMALLINT col; SQLSMALLINT n; SQLSMALLINT datatype; SQLTCHAR buf[256]; SQLLEN len; SQLRETURN rc;// retcode // データベースへの接続 rc = SQLAllocHandle(SQL_HANDLE_DBC, g.henv, g.hdbc); rc = SQLDriverConnect(g.hdbc, NULL, (SQLTCHAR *) TEXT("driver={") DRIVER TEXT("}; dbq=") DATABASE, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT); if (!SQL_SUCCEEDED(rc)) { return; } // 検索 rc = SQLAllocHandle(SQL_HANDLE_STMT, g.hdbc, hstmt); rc = SQLExecDirect(hstmt, (SQLTCHAR *) TEXT("select * from ") TABLE, SQL_NTS); if (!SQL_SUCCEEDED(rc)) { return; } // 列情報 LV_COLUMN lvCol; lvCol.mask= LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM; lvCol.fmt= LVCFMT_LEFT; lvCol.cx= 100; rc = SQLNumResultCols(hstmt, col); g.vecci.reserve(col); for (n = 0; n col; n++) { rc = SQLDescribeCol(hstmt, n+1, buf, _countof(buf), NULL, datatype, NULL, NULL, NULL); lvCol.pszText= buf; lvCol.iSubItem= n; ListView_InsertColumn(g.hList, n, lvCol); // 列情報 ColInfo ci; ci.strName= buf; ci.datatype= datatype; g.vecci.push_back(ci); // Text 12 SQL_VARCHAR // Byte -6 SQL_TINYINT } // 行情報 LV_ITEM lvItem; lvItem.mask= LVIF_TEXT; lvItem.iItem= 0; while (1) { rc = SQLFetch(hstmt); if (rc == SQL_NO_DATA) break; if (rc == SQL_ERROR) break; for (n = 0; n col; n++) { SQLGetData(hstmt, n+1, SQL_C_TCHAR, buf, _countof(buf), len); lvItem.pszText= buf; lvItem.iSubItem= n; if (n == 0) { ListView_InsertItem(g.hList, lvItem); } else { ListView_SetItem(g.hList, lvItem); } } lvItem.iItem++; } SQLFreeHandle(SQL_HANDLE_STMT, hstmt); } //------------------------------------------------------------------------------ void SaveTable(HWND hDlg) { // テーブルの作成 if (CreateTable() == FALSE) { MessageBox(hDlg, L"テーブルの作成に失敗しました。", NULL, MB_OK); return; } // レコードの挿入 if (InsertRecord() == FALSE) { MessageBox(hDlg, L"レコードの挿入に失敗しました。", NULL, MB_OK); return; } // CSVファイルの削除とリネーム TCHAR szOld[MAX_PATH]; TCHAR szNew[MAX_PATH]; swprintf_s(szOld, L"%s\\%s", DATABASE, TABLE); swprintf_s(szNew, L"%s\\%s", DATABASE, TABLE2); BOOL br; br = DeleteFile(szOld); br = MoveFile(szNew, szOld); if (br == FALSE) { MessageBox(hDlg, L"CSVファイルのリネームに失敗しました。", NULL, MB_OK); } } //------------------------------------------------------------------------------ BOOL CreateTable(void) { TCHAR stmttext[512]; SQLHSTMT hstmt;// 命令ハンドル SQLRETURN rc;// retcode rc = SQLAllocHandle(SQL_HANDLE_STMT, g.hdbc, hstmt); // テーブルの削除 wcscpy_s(stmttext, L"drop table "); wcscat_s(stmttext, TABLE2); rc = SQLExecDirect(hstmt, stmttext, SQL_NTS); // 失敗してもテーブルの作成が成功すれば問題ない // テーブルの作成 wcscpy_s(stmttext, L"create table "); wcscat_s(stmttext, TABLE2); wcscat_s(stmttext, L"("); VecCI iterator it = g.vecci.begin(); while (TRUE) { wcscat_s(stmttext, (*it).strName.c_str()); switch ((*it).datatype) { case SQL_VARCHAR wcscat_s(stmttext, L" Text"); break; case SQL_TINYINT wcscat_s(stmttext, L" Byte"); break; } if (++it == g.vecci.end()) { break; } wcscat_s(stmttext, L","); } wcscat_s(stmttext, L")"); rc = SQLExecDirect(hstmt, stmttext, SQL_NTS); SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return SQL_SUCCEEDED(rc); } //------------------------------------------------------------------------------ BOOL InsertRecord(void) { SQLHSTMT hstmt;// 命令ハンドル SQLRETURN rc;// retcode BOOL bRet = TRUE; rc = SQLAllocHandle(SQL_HANDLE_STMT, g.hdbc, hstmt); int nColNum = g.vecci.size(); int nRowNum = ListView_GetItemCount(g.hList); for (int nRow = 0; nRow nRowNum; nRow++) { TCHAR stmttext[512]; wcscpy_s(stmttext, L"insert into "); wcscat_s(stmttext, TABLE2); wcscat_s(stmttext, L" values ("); for (int nCol = 0; ; ) { TCHAR szBuf[256]; ListView_GetItemText(g.hList, nRow, nCol, szBuf, _countof(szBuf)); switch (g.vecci[nCol].datatype) { case SQL_VARCHAR wcscat_s(stmttext, L" "); wcscat_s(stmttext, szBuf); wcscat_s(stmttext, L" "); break; case SQL_TINYINT wcscat_s(stmttext, szBuf); break; } if (nColNum = ++nCol) { break; } wcscat_s(stmttext, L","); } wcscat_s(stmttext, L")"); rc = SQLExecDirect(hstmt, stmttext, SQL_NTS); if (!SQL_SUCCEEDED(rc)) { bRet = FALSE; break; } } SQLFreeHandle(SQL_HANDLE_STMT, hstmt); // トランザクション終了 rc = SQLEndTran(SQL_HANDLE_ENV, g.henv, SQL_COMMIT); return bRet; } //============================================================================== INT_PTR CALLBACK SubDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR nRet = TRUE;// メッセージを処理した switch (uMsg) { case WM_COMMAND switch (LOWORD(wParam)) { case IDOK OnOK(hDlg); EndDialog(hDlg, IDOK); break; case IDCANCEL EndDialog(hDlg, IDCANCEL); break; } break; case WM_INITDIALOG OnSubInitDialog(hDlg); nRet = TRUE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE EndDialog(hDlg, 0); break; default nRet = FALSE;// メッセージを処理しなかった } return nRet; } //------------------------------------------------------------------------------ void OnSubInitDialog(HWND hDlg) { int nFieldNum = g.vecci.size(); for (int n = 0; n nFieldNum; n++) { int y = 8 + 28 * n; TCHAR szBuf[256]; ListView_GetItemText(g.hList, g.iItem, n, szBuf, _countof(szBuf)); DWORD dwStyle = (g.vecci[n].datatype == SQL_TINYINT) ? ES_NUMBER 0; CreateWindow(L"static", g.vecci[n].strName.c_str(), WS_CHILD | WS_VISIBLE, 8, y, 192, 24, hDlg, (HMENU)IDC_STATIC, g.hInstance, 0); CreateWindowEx(WS_EX_CLIENTEDGE, L"edit", szBuf, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL | dwStyle, 208, y, 192, 24, hDlg, (HMENU)(IDC_FIELD + n), g.hInstance, 0); } } //------------------------------------------------------------------------------ void OnOK(HWND hDlg) { int nFieldNum = g.vecci.size(); for (int n = 0; n nFieldNum; n++) { TCHAR szBuf[256]; GetDlgItemText(hDlg, IDC_FIELD + n, szBuf, _countof(szBuf)); ListView_SetItemText(g.hList, g.iItem, n, szBuf); } } resource.h #define IDD_MAIN100 #define IDD_SUB101 #define IDC_STATIC-1 #define IDC_LIST1000 #define IDC_UPDATE1001 #define IDC_FIELD1100 ListView.rc // resource script #include windows.h #include "resource.h" //------------------------------------------------------------------------------ IDD_MAIN DIALOGEX 100, 100, 320, 200 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "ListView" FONT 9, "MS Pゴシック" BEGIN CONTROL"",IDC_LIST,"SysListView32", WS_BORDER | WS_TABSTOP | LVS_REPORT,8,8,304,160 PUSHBUTTON"更新",IDC_UPDATE,212,176,48,16 PUSHBUTTON"終了",IDCANCEL,264,176,48,16 END //------------------------------------------------------------------------------ IDD_SUB DIALOG 100, 100, 320, 400 STYLE WS_POPUPWINDOW CAPTION "SubDlg" FONT 9, "MS Pゴシック" BEGIN DEFPUSHBUTTON"OK",IDOK,212,376,48,16 PUSHBUTTON"Cancel",IDCANCEL,264,376,48,16 END
https://w.atwiki.jp/sampleisbest/pages/197.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 DxMesh アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode Microsoft DirectX SDK (February 2010) DxMesh.cpp /* #2 視点操作 プロジェクトのプロパティ [構成プロパティ]-[VC++ ディレクトリ] [インクルード ディレクトリ] C \Program Files\Microsoft DirectX SDK (February 2010)\Include [ライブラリ ディレクトリ] C \Program Files\Microsoft DirectX SDK (February 2010)\Lib\x86 Unicode */ #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") #include d3d9.h #include d3dx9.h #include stdio.h #include time.h #define WIDTH(rect) ((rect).right - (rect).left) #define HEIGHT(rect) ((rect).bottom - (rect).top) #define SAFE_RELEASE(p) { if(p) { (p)- Release(); (p)=NULL; } } #define APP_NAME L"DxMesh" #define CLIENT_W 640 #define CLIENT_H 480 struct Mesh { ID3DXBuffer *pMat; DWORD dwNumMat; ID3DXMesh *pMesh; }; // 関数プロトタイプ宣言 HRESULT InitD3D(HWND hWnd); LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void Render(HWND hWnd); BOOL OnKeyDown(HWND hWnd, WPARAM wParam); HRESULT OnSave(void); // 外部変数構造体 static struct { LPDIRECT3D9 pD3D;// Direct3D9 LPDIRECT3DDEVICE9 pDev;// レンダリングデバイス LPD3DXFONT pFont;// フォント Mesh cube; Mesh axis; float fDist;// 原点との距離 int nLat;// 緯度 int nLong;// 経度 } g; //============================================================================== int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow) { g.fDist = 75.0f; g.nLat = 30; g.nLong = 210; // ウィンドウクラスの登録 WNDCLASSEX wcx; ZeroMemory( wcx, sizeof wcx); wcx.cbSize= sizeof wcx; wcx.lpfnWndProc= WndProc; wcx.hInstance= hInstance; wcx.hCursor= LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)); wcx.lpszClassName= APP_NAME; if (RegisterClassEx( wcx) == 0) { return 0; } // ウィンドウサイズの計算 RECT rect; SetRect( rect, 0, 0, CLIENT_W, CLIENT_H); AdjustWindowRect( rect, WS_OVERLAPPEDWINDOW, FALSE); // ウィンドウの作成 HWND hWnd = CreateWindow( APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, WIDTH(rect), HEIGHT(rect), NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return 0; } // Direct3Dの初期化 if (FAILED(InitD3D(hWnd))) { return 0; } // ウィンドウ表示 ShowWindow(hWnd, nCmdShow); // メッセージループ MSG msg; do { Sleep(1); if (PeekMessage( msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage( msg); DispatchMessage( msg); } else { Render(hWnd); } } while (msg.message != WM_QUIT); SAFE_RELEASE(g.cube.pMesh); SAFE_RELEASE(g.axis.pMesh); SAFE_RELEASE(g.pFont); SAFE_RELEASE(g.pDev); SAFE_RELEASE(g.pD3D); return msg.wParam; } //------------------------------------------------------------------------------ HRESULT InitD3D(HWND hWnd) { // Direct3D g.pD3D = Direct3DCreate9(D3D_SDK_VERSION); if (g.pD3D == NULL) { return E_FAIL; } // デバイス作成用のパラメタ D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( d3dpp, sizeof d3dpp); d3dpp.BackBufferFormat= D3DFMT_UNKNOWN;// モニタの設定と同じ d3dpp.BackBufferCount= 0;// バックバッファの数 0- 1 d3dpp.MultiSampleType= D3DMULTISAMPLE_NONE;// マルチサンプリングしない d3dpp.SwapEffect= D3DSWAPEFFECT_DISCARD;// Direct3Dに任せる d3dpp.hDeviceWindow= NULL;// カバーウィンドウ d3dpp.Windowed= TRUE;// ウィンドウモード d3dpp.EnableAutoDepthStencil= TRUE;// 深度バッファ自動管理 d3dpp.AutoDepthStencilFormat= D3DFMT_D16;// 深度バッファフォーマット d3dpp.PresentationInterval= D3DPRESENT_INTERVAL_DEFAULT;// モニタの垂直回帰を待つ // Direct3Dデバイスの作成 HRESULT hr = g.pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, d3dpp, g.pDev); // フォント if (SUCCEEDED(hr)) { hr = D3DXCreateFont(g.pDev, 40, 0, FW_HEAVY, 1, FALSE, SHIFTJIS_CHARSET, OUT_TT_ONLY_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE, L"MS Pゴシック", g.pFont); } // 立方体メッシュ作成 if (SUCCEEDED(hr)) { hr = D3DXLoadMeshFromX(L"C \\tmp\\Cube2.x", D3DXMESH_MANAGED, g.pDev, NULL, g.cube.pMat, NULL, g.cube.dwNumMat, g.cube.pMesh); } // 軸メッシュ作成 if (SUCCEEDED(hr)) { hr = D3DXLoadMeshFromX(L"C \\tmp\\Axis.x", D3DXMESH_MANAGED, g.pDev, NULL, g.axis.pMat, NULL, g.axis.dwNumMat, g.axis.pMesh); } return hr; } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_KEYDOWN if (OnKeyDown(hWnd, wParam)) { return 0; } break; case WM_DESTROY PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } //------------------------------------------------------------------------------ void Render(HWND hWnd) { static int fps = 0; static int frame = 0; static time_t tmPrev = time(NULL); if (IsIconic(hWnd)) return; g.pDev- SetRenderState(D3DRS_ZENABLE, TRUE); g.pDev- SetRenderState(D3DRS_ZWRITEENABLE, TRUE); // 視点の設定 D3DXMATRIX mtxView; float fRad = D3DXToRadian(g.nLat);// 緯度 float fPosY = sin(fRad) * g.fDist; float fDist = cos(fRad) * g.fDist; fRad = D3DXToRadian(g.nLong);// 経度 float fPoxX = sin(fRad) * fDist; float fPoxZ = cos(fRad) * fDist; D3DXMatrixLookAtLH( mtxView, D3DXVECTOR3(fPoxX, fPosY, fPoxZ), D3DXVECTOR3(0.0f, 0.0f, 0.0f), D3DXVECTOR3(0.0f, 1.0f, 0.0f)); g.pDev- SetTransform(D3DTS_VIEW, mtxView); D3DXMATRIX mtxProj; D3DXMatrixPerspectiveFovLH( mtxProj, D3DXToRadian(45), (float)CLIENT_W / CLIENT_H, 0.1f, 100.0f); g.pDev- SetTransform(D3DTS_PROJECTION, mtxProj); // ライトの設定 g.pDev- SetRenderState(D3DRS_LIGHTING, TRUE); g.pDev- SetRenderState(D3DRS_AMBIENT, 0x007f7f7f); D3DLIGHT9 light; ZeroMemory( light, sizeof light); light.Type= D3DLIGHT_DIRECTIONAL; light.Diffuse= D3DXCOLOR(1.0f, 1.0f, 1.0f, 0.0f); light.Ambient= D3DXCOLOR(0.5f, 0.5f, 0.5f, 0.0f); light.Direction= D3DXVECTOR3(1.0f, -2.0f, 3.0f); //light.Range= 1000.0f; g.pDev- SetLight(0, light); g.pDev- LightEnable(0, TRUE); // バックバッファのクリア g.pDev- Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0x7f,0x7f,0xff), 1.0f, 0); g.pDev- BeginScene(); D3DCOLORVALUE matAmb = {0.3f, 0.3f, 0.3f, 1.0f}; //D3DCOLORVALUE matDif = {1.0f, 0.0f, 0.0f, 1.0f};// 元の色情報を上書き D3DXMATRIX mtxWorld; D3DXMatrixIdentity( mtxWorld); g.pDev- SetTransform(D3DTS_WORLD, mtxWorld); // 立方体描画 for (DWORD dw = 0; dw g.cube.dwNumMat; dw++) { D3DXMATERIAL *pMat = (D3DXMATERIAL *)g.cube.pMat- GetBufferPointer() + dw; pMat- MatD3D.Ambient = matAmb; //pMat- MatD3D.Diffuse = matDif; g.pDev- SetMaterial( pMat- MatD3D); g.cube.pMesh- DrawSubset(dw); } // 軸描画 for (DWORD dw = 0; dw g.axis.dwNumMat; dw++) { D3DXMATERIAL *pMat = (D3DXMATERIAL *)g.axis.pMat- GetBufferPointer() + dw; pMat- MatD3D.Ambient = matAmb; //pMat- MatD3D.Diffuse = matDif; g.pDev- SetMaterial( pMat- MatD3D); g.axis.pMesh- DrawSubset(dw); } // fps TCHAR szBuf[32]; RECT rect; time_t tmCurr = time(NULL); if (tmCurr != tmPrev) { fps = frame; frame = 0; tmPrev = tmCurr; } frame++; SetRect( rect, 0, 0, 50, 20); swprintf_s(szBuf, L"time=%lld fps=%d", tmCurr, fps); g.pFont- DrawText(NULL, szBuf, -1, rect, DT_LEFT | DT_NOCLIP, D3DCOLOR_ARGB(0xff,0xff,0xff,0xff)); // バックバッファを表画面に反映 g.pDev- EndScene(); g.pDev- Present(NULL, NULL, NULL, NULL); } //------------------------------------------------------------------------------ BOOL OnKeyDown(HWND hWnd, WPARAM wParam) { switch (wParam) { case VK_LEFT g.nLong++; break; case VK_RIGHT g.nLong--; break; case VK_UP g.nLat++; break; case VK_DOWN g.nLat--; break; case VK_PRIOR // Page Up g.fDist -= 1.0f; break; case VK_NEXT // Page Down g.fDist += 1.0f; break; case S if (GetKeyState(VK_CONTROL) 0) { HRESULT hr = OnSave(); if (FAILED(hr)) { MessageBox(hWnd, L"保存に失敗しました。", NULL, MB_OK); } else { MessageBox(hWnd, L"保存しました。", APP_NAME, MB_OK); } } break; case VK_ESCAPE DestroyWindow(hWnd); break; default return FALSE; } return TRUE; } //------------------------------------------------------------------------------ HRESULT OnSave(void) { HRESULT hr = D3DXSaveMeshToX( L"C \\tmp\\Cube2_2.x", g.cube.pMesh, NULL, (D3DXMATERIAL *) g.cube.pMat, NULL, g.cube.dwNumMat, D3DXF_FILEFORMAT_TEXT); return hr; }
https://w.atwiki.jp/ssbu-cloud/pages/282.html
2022年10月07日~10月09日 The Big House 10 (アメリカ) 2023年10月20日~10月22日 The Big House 11 (アメリカ)
https://w.atwiki.jp/bemani2dp/pages/4020.html
GENRE TITLE ARTIST bpm notes CLEAR RATE DRUMSTEP BIGソムタム AJURIKA 187 n%(yyyy/mm/dd) 攻略・コメント 名前 コメント
https://w.atwiki.jp/sampleisbest/pages/286.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 EzTimer アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト EzTimer.cpp #pragma comment(lib, "winmm") #include stdio.h #include time.h #include Windows.h #include WindowsX.h #include "resource.h" #define SECT L"General" #define MAKESMSG(st,ch,d1,d2) (st) 4|(ch)|(d1) 8|(d2) 16 #define CH 0 #define NOTE_NO 69 // 関数プロトタイプ宣言 void GetIniFileName(); INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnInitDialog(HWND hDlg); void OnDestroy(HWND hDlg); void OnTimer(HWND hDlg); void OnDrawItem(WPARAM wParam, LPARAM lParam); void OnOK(HWND hDlg); BOOL GetDlgData(HWND hDlg); // 外部変数 TCHAR szIniFile[MAX_PATH]; HFONT hFont; HWND hClock; HWND hMessage; TCHAR szMessage[16]; INT_PTR uIDEvent; HMIDIOUT hmo; BOOL alarm = FALSE; BOOL note = FALSE; int mode; int alarmH; int alarmM; int timerMS; time_t timer; time_t base; int test = BST_UNCHECKED; int mute = BST_UNCHECKED; //============================================================================== int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { GetIniFileName(); midiOutOpen( hmo, MIDI_MAPPER, NULL, 0, CALLBACK_NULL); midiOutShortMsg(hmo, MAKESMSG(0xc, CH, 0, 0));// Program Change Piano DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG), NULL, DlgProc); midiOutReset(hmo); midiOutClose(hmo); return 0; } void GetIniFileName() { TCHAR szPath[_MAX_PATH]; TCHAR szDrive[_MAX_DRIVE]; TCHAR szDir[_MAX_DIR]; TCHAR szFName[_MAX_FNAME]; TCHAR szExt[_MAX_EXT]; GetModuleFileName(NULL, szPath, _countof(szPath)); _wsplitpath_s(szPath, szDrive, szDir, szFName, szExt); _wmakepath_s(szIniFile, szDrive, szDir, szFName, L"ini"); } INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { INT_PTR res = TRUE;// メッセージを処理した switch (uMsg) { case WM_TIMER OnTimer(hDlg); break; case WM_DRAWITEM OnDrawItem(wParam, lParam); break; case WM_COMMAND switch (LOWORD(wParam)) { case IDC_TEST test = Button_GetCheck(GetDlgItem(hDlg, IDC_TEST)); break; case IDC_MUTE mute = Button_GetCheck(GetDlgItem(hDlg, IDC_MUTE)); break; case IDOK // Start OnOK(hDlg); break; case IDCANCEL // Stop mode = 0; alarm = FALSE; szMessage[0] = L \0 ; InvalidateRect(hMessage, NULL, FALSE); break; } break; case WM_INITDIALOG OnInitDialog(hDlg); //SetFocus(GetDlgItem(hDlg, IDC_ALARM_H)); //res = FALSE;// SetFocusでフォーカスを設定した場合はFALSE break; case WM_CLOSE EndDialog(hDlg, 0); break; case WM_DESTROY OnDestroy(hDlg); break; default res = FALSE;// メッセージを処理しなかった } return res; } void OnInitDialog(HWND hDlg) { int nX = GetPrivateProfileInt(SECT, L"X", 100, szIniFile); int nY = GetPrivateProfileInt(SECT, L"Y", 100, szIniFile); SetWindowPos(hDlg, HWND_TOP, nX, nY, 0, 0, SWP_NOSIZE); // フォント作成 LOGFONT lf; ZeroMemory( lf, sizeof lf); lf.lfCharSet= DEFAULT_CHARSET; lf.lfHeight= 60; wcscpy_s(lf.lfFaceName, L"Arial Black"); hFont = CreateFontIndirect( lf); hClock = GetDlgItem(hDlg, IDC_CLOCK); hMessage = GetDlgItem(hDlg, IDC_MESSAGE); uIDEvent = SetTimer(hDlg, 1, 1000, NULL); Button_SetCheck(GetDlgItem(hDlg, IDC_RADIO1), BST_CHECKED); mode = 0; time( timer); } void OnDestroy(HWND hDlg) { RECT rc; GetWindowRect(hDlg, rc); TCHAR szBuf[16]; swprintf_s(szBuf, L"%d", rc.left); WritePrivateProfileString(SECT, L"X", szBuf, szIniFile); swprintf_s(szBuf, L"%d", rc.top); WritePrivateProfileString(SECT, L"Y", szBuf, szIniFile); DeleteObject(hFont); KillTimer(hDlg, uIDEvent); } void OnTimer(HWND hDlg) { InvalidateRect(hClock, NULL, FALSE); if (note) { midiOutShortMsg(hmo, MAKESMSG(0x8, CH, NOTE_NO, 0));// Note Off note = FALSE; } time( timer); alarm = (test == BST_CHECKED); switch (mode) { case 1 // Alarm { tm tm; localtime_s( tm, timer); if (tm.tm_hour == alarmH tm.tm_min == alarmM) { alarm = TRUE; } } break; case 2 // Timer { int count = int(base - timer); if (count = 0) { count = 0; alarm = TRUE; } swprintf_s(szMessage, L"%d %02d", count / 60, count % 60); InvalidateRect(hMessage, NULL, FALSE); } break; case 3 // Stop Watch { int count = int(timer - base); swprintf_s(szMessage, L"%02d %02d %02d", count / 3600, (count / 60) % 60, count % 60); InvalidateRect(hMessage, NULL, FALSE); } break; } if (alarm mute == BST_UNCHECKED) { midiOutShortMsg(hmo, MAKESMSG(0x9, CH, NOTE_NO, 127));// Note On note = TRUE; } } void OnDrawItem(WPARAM wParam, LPARAM lParam) { LPDRAWITEMSTRUCT pdi = (LPDRAWITEMSTRUCT)lParam; HDC hdc = pdi- hDC; SetBkMode(hdc, TRANSPARENT);// 背景透過モード HGDIOBJ hFontOld = SelectObject(hdc, hFont); // 背景塗り潰し RECT rc; GetClientRect(pdi- hwndItem, rc); FillRect(hdc, rc, GetSysColorBrush(COLOR_WINDOW)); switch (pdi- CtlID) { case IDC_CLOCK tm tm; localtime_s( tm, timer); TCHAR clock[8+1]; swprintf_s(clock, L"%02d %02d %02d", tm.tm_hour, tm.tm_min, tm.tm_sec); DrawText(hdc, clock, -1, rc, DT_CENTER | DT_SINGLELINE | DT_VCENTER); break; case IDC_MESSAGE SetTextColor(hdc, RGB(255,0,0)); DrawText(hdc, szMessage, -1, rc, DT_CENTER | DT_SINGLELINE | DT_VCENTER); break; } SelectObject(hdc, hFontOld); } void OnOK(HWND hDlg) { GetDlgData(hDlg); switch (mode) { case 1 // Alarm swprintf_s(szMessage, L"%02d %02d 00", alarmH, alarmM); InvalidateRect(hMessage, NULL, FALSE); break; case 2 // Timer base = timer + (timerMS / 100) * 60 + (timerMS % 100); break; case 3 // Stop Watch base = timer; break; } } BOOL GetDlgData(HWND hDlg) { mode = 0; for (int n = 0; n 3; n++) { if (Button_GetCheck(GetDlgItem(hDlg, IDC_RADIO1 + n)) == BST_CHECKED) { mode = 1 + n; break; } } BOOL b; alarmH= GetDlgItemInt(hDlg, IDC_ALARM_H, b, FALSE); alarmM= GetDlgItemInt(hDlg, IDC_ALARM_M, b, FALSE); timerMS= GetDlgItemInt(hDlg, IDC_TIMER_MS, b, FALSE); return TRUE; } resource.h #define IDD_DIALOG100 #define IDC_STATIC-1 #define IDC_CLOCK1000 #define IDC_MESSAGE1001 #define IDC_ALARM_H1002 #define IDC_ALARM_M1003 #define IDC_TIMER_MS1004 //#define IDC_TIMER_S1005 #define IDC_TEST1006 #define IDC_MUTE1007 #define IDC_RADIO11101// Alarm #define IDC_RADIO21102// Timer #define IDC_RADIO31103// Stop Watch EzTimer.rc // resource script #include Windows.h #include "resource.h" IDD_DIALOG DIALOGEX 100, 100, 140, 165 STYLE WS_POPUPWINDOW | WS_MINIMIZEBOX EXSTYLE WS_EX_APPWINDOW CAPTION "EzTimer" FONT 10, "MS Pゴシック" BEGIN LTEXT"",IDC_CLOCK,5,5,130,35,WS_BORDER | SS_OWNERDRAW LTEXT"",IDC_MESSAGE,5,45,130,35,WS_BORDER | SS_OWNERDRAW CONTROL"Alarm",IDC_RADIO1,"button",BS_AUTORADIOBUTTON | WS_GROUP,5,85,50,15 CONTROL"Timer",IDC_RADIO2,"button",BS_AUTORADIOBUTTON,5,105,50,15 CONTROL"Stop Watch",IDC_RADIO3,"button",BS_AUTORADIOBUTTON,5,125,50,15 EDITTEXTIDC_ALARM_H,70,86,15,13,WS_GROUP LTEXT"h",IDC_STATIC,90,88,10,15 EDITTEXTIDC_ALARM_M,105,86,15,13 LTEXT"m",IDC_STATIC,125,88,10,15 EDITTEXTIDC_TIMER_MS,70,106,25,13 LTEXT"mmss",IDC_STATIC,100,108,25,15 //EDITTEXTIDC_TIMER_S,105,106,15,13 //LTEXT"s",IDC_STATIC,125,108,10,15 AUTOCHECKBOX"Test",IDC_TEST,5,145,30,15 AUTOCHECKBOX"Mute",IDC_MUTE,35,145,30,15 PUSHBUTTON"Start",IDOK,70,145,30,15 PUSHBUTTON"Stop",IDCANCEL,105,145,30,15 END
https://w.atwiki.jp/sampleisbest/pages/64.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 EnumFont アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode EnumFont.c #include fcntl.h // _O_WTEXT #include io.h // _setmode #include stdio.h // _fileno #include tchar.h #include Windows.h #include "resource.h" #define LINE_HEIGHT 48 // 関数プロトタイプ宣言 LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int CALLBACK EnumFontFamExProc(const LOGFONT* lpelfe, const TEXTMETRIC* lpntme, DWORD FontType, LPARAM lParam); void OnCreate(HWND hWnd); void OnSize(HWND hWnd); void OnVScroll(HWND hWnd, WPARAM wParam, LPARAM lParam); void OnMouseWheel(HWND hWnd, WPARAM wParam, LPARAM lParam); int OnCommand(HWND hWnd, WPARAM wParam); void OnPaint(HWND hWnd); // グローバル変数 TCHARg_atcClassName[] = _T("EnumFont"); TCHARg_atcWindowName[] = _T("Enum Font"); SCROLLINFOg_siVert; LOGFONTg_aLogFont[512]; intg_iFontNum = 0; //============================================================================== int APIENTRY _tWinMain( HINSTANCEhInstance, HINSTANCEhPrevInstance, LPTSTRlpCmdLine, intnCmdShow) { WNDCLASSEXwcex; HWNDhWnd; MSGmsg; HACCELhAccelTable; _setmode(_fileno(stdout), _O_WTEXT); // ウィンドウクラスの登録 wcex.cbSize= sizeof wcex; wcex.style= CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc= WndProc; wcex.cbClsExtra= 0; wcex.cbWndExtra= 0; wcex.hInstance= hInstance; wcex.hIcon= LoadIcon(NULL, IDI_APPLICATION); wcex.hCursor= LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground= (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName= NULL; wcex.lpszClassName= g_atcClassName; wcex.hIconSm= LoadIcon(NULL, IDI_APPLICATION); if (RegisterClassEx( wcex) == 0) { return 0; } // ウィンドウの作成 hWnd = CreateWindow( g_atcClassName,// ClassName g_atcWindowName,// WindowName WS_OVERLAPPEDWINDOW | WS_VSCROLL,// Style CW_USEDEFAULT,// x 0,// y CW_USEDEFAULT,// Width 0,// Height NULL,// WndParent NULL,// Menu hInstance, NULL); if (hWnd == NULL) { return 0; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDR_MAINFRAME); while (GetMessage( msg, NULL, 0, 0)) { if (TranslateAccelerator(msg.hwnd, hAccelTable, msg) == 0) { TranslateMessage( msg); DispatchMessage( msg); } } return msg.wParam; } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_PAINT OnPaint(hWnd); break; case WM_VSCROLL OnVScroll(hWnd, wParam, lParam); break; case WM_MOUSEWHEEL OnMouseWheel(hWnd, wParam, lParam); break; case WM_COMMAND if (OnCommand(hWnd, wParam)) { return DefWindowProc(hWnd, uMsg, wParam, lParam); } break; case WM_SIZE OnSize(hWnd); break; case WM_CREATE OnCreate(hWnd); break; case WM_DESTROY PostQuitMessage(0); break; default return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; } //------------------------------------------------------------------------------ int CALLBACK EnumFontFamExProc(const LOGFONT* lpelfe, const TEXTMETRIC* lpntme, DWORD FontType, LPARAM lParam) { _tprintf(_T("%d,%d,\t%d,%d,%d,%d,%d,%d,%d,\t%d,%d,%d,%d,\t%s\n"), lpelfe- lfHeight, lpelfe- lfWidth, lpelfe- lfEscapement, lpelfe- lfOrientation, lpelfe- lfWeight, lpelfe- lfItalic, lpelfe- lfUnderline, lpelfe- lfStrikeOut, lpelfe- lfCharSet, lpelfe- lfOutPrecision, lpelfe- lfClipPrecision, lpelfe- lfQuality, lpelfe- lfPitchAndFamily, lpelfe- lfFaceName); if (_countof(g_aLogFont) = g_iFontNum) { return 0;// 列挙停止 } if (g_iFontNum == 0 || _tcscmp(g_aLogFont[g_iFontNum - 1].lfFaceName, lpelfe- lfFaceName)) { g_aLogFont[g_iFontNum++] = *lpelfe; } return 1;// 列挙継続 } //------------------------------------------------------------------------------ void OnCreate(HWND hWnd) { HDChDC; LOGFONTlogfont; RECTrcClient; hDC = GetDC(NULL); ZeroMemory( logfont, sizeof logfont); logfont.lfCharSet = DEFAULT_CHARSET; EnumFontFamiliesEx(hDC, logfont, EnumFontFamExProc, 0, 0); ReleaseDC(NULL, hDC); GetClientRect(hWnd, rcClient); g_siVert.cbSize= sizeof g_siVert; g_siVert.fMask= SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL; g_siVert.nMin= 0; g_siVert.nMax= LINE_HEIGHT * g_iFontNum - 1; g_siVert.nPage= rcClient.bottom; g_siVert.nPos= 0; SetScrollInfo(hWnd, SB_VERT, g_siVert, FALSE); } //------------------------------------------------------------------------------ void OnSize(HWND hWnd) { RECTrcClient; intiPosMax; GetClientRect(hWnd, rcClient); g_siVert.nPage= rcClient.bottom; iPosMax = g_siVert.nMax - g_siVert.nPage + 1; if (iPosMax 0) { iPosMax = 0; } if (iPosMax g_siVert.nPos) { g_siVert.nPos = iPosMax; } SetScrollInfo(hWnd, SB_VERT, g_siVert, TRUE); } //------------------------------------------------------------------------------ // (HWND)lParam handle to scroll bar void OnVScroll(HWND hWnd, WPARAM wParam, LPARAM lParam) { SCROLLINFOsi; intiPos; intiPosMax; iPos = g_siVert.nPos; iPosMax = g_siVert.nMax - g_siVert.nPage + 1; switch (LOWORD(wParam)) { case SB_LINEUP // 0 iPos -= LINE_HEIGHT; break; case SB_LINEDOWN // 1 iPos += LINE_HEIGHT; break; case SB_PAGEUP // 2 iPos -= g_siVert.nPage; break; case SB_PAGEDOWN // 3 iPos += g_siVert.nPage; break; case SB_THUMBTRACK // 5 si.cbSize= sizeof si; si.fMask= SIF_TRACKPOS; if (GetScrollInfo(hWnd, SB_VERT, si) != 0) { iPos = si.nTrackPos; } break; case SB_TOP // 6 iPos = 0; break; case SB_BOTTOM // 7 iPos = iPosMax; break; } iPos = min(iPos, iPosMax); iPos = max(iPos, 0); if (iPos == g_siVert.nPos) { return; } ScrollWindowEx(hWnd, 0, g_siVert.nPos - iPos, NULL, NULL, NULL, NULL, SW_INVALIDATE | SW_ERASE); g_siVert.nPos = iPos; SetScrollInfo(hWnd, SB_VERT, g_siVert, TRUE); UpdateWindow(hWnd); } //------------------------------------------------------------------------------ void OnMouseWheel(HWND hWnd, WPARAM wParam, LPARAM lParam) { intnScrollCode; shortzDelta; zDelta = HIWORD(wParam); if (0 zDelta) { nScrollCode = SB_LINEUP; } else { nScrollCode = SB_LINEDOWN; } SendMessage(hWnd, WM_VSCROLL, nScrollCode, (LPARAM)NULL); } //------------------------------------------------------------------------------ int OnCommand(HWND hWnd, WPARAM wParam) { intnScrollCode; switch (LOWORD(wParam)) { case ID_PAGEUP nScrollCode = SB_PAGEUP; break; case ID_PAGEDOWN nScrollCode = SB_PAGEDOWN; break; case ID_END nScrollCode = SB_BOTTOM; break; case ID_HOME nScrollCode = SB_TOP; break; case ID_UP nScrollCode = SB_LINEUP; break; case ID_DOWN nScrollCode = SB_LINEDOWN; break; default return 1; } SendMessage(hWnd, WM_VSCROLL, nScrollCode, (LPARAM)NULL); return 0; } //------------------------------------------------------------------------------ void OnPaint(HWND hWnd) { HDChdc; PAINTSTRUCTps; HFONThFont; HGDIOBJhFontOld; TCHARatcFaceName[32]; TCHARatcStr[] = _T("012abc日本語"); TCHAR*ptc; intiStrLen; intiY; inti; hdc = BeginPaint(hWnd, ps); iStrLen = _tcslen(atcStr); for (i = 0; i g_iFontNum; i++) { iY = i * LINE_HEIGHT - g_siVert.nPos; if (iY + LINE_HEIGHT ps.rcPaint.top || ps.rcPaint.bottom iY) { continue; } ptc = g_aLogFont[i].lfFaceName; TextOut(hdc, 0, iY, ptc, _tcslen(ptc)); hFont = CreateFontIndirect(g_aLogFont + i); hFontOld = SelectObject(hdc, hFont); GetTextFace(hdc, _countof(atcFaceName), atcFaceName); TextOut(hdc, 200, iY, atcFaceName, _tcslen(atcFaceName)); TextOut(hdc, 600, iY, atcStr, iStrLen); SelectObject(hdc, hFontOld); DeleteObject(hFont); } EndPaint(hWnd, ps); } resource.h #define IDR_MAINFRAME128 #define ID_PAGEUP129 #define ID_PAGEDOWN130 #define ID_END131 #define ID_HOME132 #define ID_UP133 #define ID_DOWN134 EnumFont.rc // リソーススクリプト #include windows.h #include "resource.h" //------------------------------------------------------------------------------ // アクセラレータ IDR_MAINFRAME ACCELERATORS BEGIN VK_PRIOR,ID_PAGEUP,VIRTKEY VK_NEXT,ID_PAGEDOWN,VIRTKEY VK_END,ID_END,VIRTKEY VK_HOME,ID_HOME,VIRTKEY VK_UP,ID_UP,VIRTKEY VK_DOWN,ID_DOWN,VIRTKEY END
https://w.atwiki.jp/itsuro-note/pages/31.html
表示関連 hello_world.c ソート関連 BubbleSort.c
https://w.atwiki.jp/dtmoedenpa/pages/71.html
A Big Boy 歌詞:47号 対応曲:615氏type3.mp3 エロゲしてるだけ 家にこもるだけ それどれだけ続けてきただろ フラグ立てるだけ 何度(も)何度も それをずっと続けていますよ 明日(あす)になっても私は 萌え萌え言ってるのかな? 死んでりゃ良かった あの日あの時に つらい思い出あるよ いくらでも 私の一番 大事な時間を 捨てちゃってたよ エロゲをやってて 「死にたい.....」 たった一つだけ生き甲斐あります 特典フィギュア 大事にしましょう 明日になっても萌えキャラ 笑ってそばにいてくれる 生まれて良かった エロゲが出来たし 萌えって気持ち 理解が出来たし 私が世界で 一番幸せ エロゲ作った人たちほんとにありがと 生まれて損した やなことばかりで 俺の存在みんなの害だし 消えてしまいたい 今すぐここから これから先もずっとこのままだ 「もうやだ.....」
https://w.atwiki.jp/yougakupv/pages/87.html
Mr.Big Green Tinted Sixties Mind Shine To Be With You Wild World
https://w.atwiki.jp/tmtbnc/pages/45.html
Platform FFI Platform Constants BYTE_ORDER LITTLE_ENDIAN BIG_ENDIAN CPU INT8_ALIGN INT8_SIZE INT16_ALIGN INT16_SIZE INT32_ALIGN INT32_SIZE INT64_ALIGN INT64_SIZE LONG_ALIGN LONG_SIZE FLOAT_ALIGN FLOAT_SIZE DOUBLE_ALIGN DOUBLE_SIZE ADDRESS_ALIGN ADDRESS_SIZE